/**
 * 给定长度为N+2的字符串S，前N个字母是W或B，最后两格是空的
 * 给定长度为N的字符串T作为目标，问能否通过移动S得到T，求最小步数
 * 每次移动，可以选S中两格相邻的字母将其移动到空格
 * N只有14，搜索即可。
 */
#include <bits/stdc++.h>
#include <bits/extc++.h>
using namespace std;

using llt = long long;
using vi = vector<int>;
using pii = pair<int, int>;
using vpii = vector<pii>;
using vll = vector<llt>;

template<typename T>
istream & operator >> (istream & is, vector<T> & v){
    for(auto & i : v) is >> i;
    return is;
}

template<typename T>
void input(vector<T> & v, int n){
    v.assign(n + 1, {});
    for(int i=1;i<=n;++i) cin >> v[i];
    return;
}

int N;
string S, T;

int get(const string & s){
    int ans = 0;
    for(auto c : s){
        if('B' == c){
            ans = ans * 3 + 1;
        }else if('W' == c){
            ans = ans * 3 + 2;
        }else{
            ans = ans * 3 + 0;
        }
    }
    return ans;
}

int f(const string & s){
    for(int i=0;i<N;++i)if(s[i]=='.')return i;
    return -1;
}

string swap(const string & s, int a, int b){
    string ans(s);
    swap(ans[a], ans[b]);
    swap(ans[a + 1], ans[b + 1]);
    return ans;
}

vi Flag;
int proc(){
    S = S + "..";
    T = T + "..";
    N += 2;
    int sz = 1;
    for(int i=1;i<=N;++i) sz *= 3;
    Flag.assign(sz, 0);
    
    int ans = 0;
    queue<string> q;
    q.push(S);Flag[get(S)] = 1;
    while(sz = q.size()){
        ans += 1;
        // cout << ans << ":" << endl;
        while(sz--){
            auto h = q.front(); q.pop();

            // cout << h << endl;

            int pos = f(h);
            for(int i=1;i<pos;++i){
                auto t = swap(h, i - 1, pos);
                if(t == T) return ans;
                auto tt = get(t);
                if(Flag[tt] == 0){
                    Flag[tt] = 1;
                    q.push(t);
                }
            }

            for(int i=pos+3;i<N;++i){
                auto t = swap(h, pos, i - 1);
                if(t == T) return ans;
                auto tt = get(t);
                if(Flag[tt] == 0){
                    Flag[tt] = 1;
                    q.push(t);
                }
            }
        }
    }

    return -1;
}

void work(){
    cin >> N >> S >> T;
    if(S == T) return (void)(cout << "0\n");

    int ans = proc();
    cout << ans << endl;
    return;
}

int main() {
#ifndef ONLINE_JUDGE
    freopen("z.txt", "r", stdin);
#endif
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    int nofkase = 1;
    // cin >> nofkase;
    while(nofkase--) work();
    return 0;
}